package com.github.cakin.shiro.chapter17.service;

/**
 * @className: OAuthService
 * @description: OAuthService 服务，进行 auth code 和 access token 的维护
 * @date: 2020/5/27
 * @author: cakin
 */
public interface OAuthService {
    /**
     * 功能描述：添加 auth code
     *
     * @param authCode 授权码
     * @param username 用户名
     * @author cakin
     * @date 2020/5/27
     */
    void addAuthCode( String authCode, String username );

    /**
     * 功能描述：添加 access token
     *
     * @param accessToken 访问码
     * @param username    用户名
     * @author cakin
     * @date 2020/5/27
     */
    void addAccessToken( String accessToken, String username );

    /**
     * 功能描述：验证auth code是否有效
     *
     * @param authCode 授权码
     * @return boolean 返回值
     * @author cakin
     * @date 2020/5/27
     */
    boolean checkAuthCode( String authCode );

    /**
     * 功能描述：验证access token是否有效
     *
     * @param accessToken 访问码
     * @return boolean 返回值
     * @author cakin
     * @date 2020/5/27
     */
    boolean checkAccessToken( String accessToken );

    /**
     * 功能描述：根据auth code获取用户名
     *
     * @param authCode 授权码
     * @return String 用户名
     * @author cakin
     * @date 2020/5/27
     */
    String getUsernameByAuthCode( String authCode );

    /**
     * 功能描述：根据access token获取用户名
     *
     * @param accessToken 访问码
     * @return String 用户名
     * @author cakin
     * @date 2020/5/27
     */
    String getUsernameByAccessToken( String accessToken );

    /**
     * 功能描述：auth code / access token 过期时间
     *
     * @return long 过期时间
     * @author cakin
     * @date 2020/5/27
     */
    long getExpireIn();

    /**
     * 功能描述：检查客户端id是否存在
     * @param clientId 客户端Id
     * @return boolean
     * @author cakin
     * @date 2020/5/27
     */
    boolean checkClientId( String clientId );
    /**
     * 功能描述：坚持客户端安全KEY是否存在
     * @param clientSecret 客户端安全KEY
     * @return boolean
     * @author cakin
     * @date 2020/5/27
     */
    boolean checkClientSecret( String clientSecret );
}
